/*
 * @Descripttion: Lutongli代码
 * @version: 1.0.0
 * @Author: LutongLi
 * @Date: 2025-05-28 08:02:41
 * @LastEditTime: 2025-06-04 01:19:30
 */
package impl

import (
	"database/sql"

	"github.com/infraboard/mcube/logger"
	"github.com/infraboard/mcube/logger/zap"

	"gitee.com/king_max/restful-api-demo/apps"
	"gitee.com/king_max/restful-api-demo/apps/host"
	"gitee.com/king_max/restful-api-demo/conf"
)

// 接口实现的静态检查
var _ host.Service = (*HostServiceImpl)(nil)

func NewHostServiceImpl() *HostServiceImpl {
	return &HostServiceImpl{
		//todo:返回要创建的数据

		//Host Service 服务的子logger
		//封装zap让其满足Logger接口
		//为什么要封装：
		//		1.logger全局实例	
		//		2.logger level的动态配置,logrus不支持level的动态调整
		//	 	3. 加入日志轮转功能的集合
		l: zap.L().Named("Host"),
		db: conf.C().MySQL.GetDB(),
	}
}


// 实现接口的对象
type HostServiceImpl struct {
	l logger.Logger
	db *sql.DB
}

//这里只需要保证全局对象Config和全局logger已经加载就可以了
func(i *HostServiceImpl)Config(){
	//Host Service 服务的子logger
		//封装zap让其满足Logger接口
		//为什么要封装：
		//		1.logger全局实例	
		//		2.logger level的动态配置,logrus不支持level的动态调整
		//	 	3. 加入日志轮转功能的集合
	i.l = zap.L().Named("Host")
	i.db = conf.C().MySQL.GetDB()
}
//之前在start时候，手动把服务的实现注册到IOC层
//注册HostService的实例到IOC
// apps.HostService = impl.NewHostServiceImpl()

//举个例子：
// mysql的驱动加载实现方式
// sql这个库，是一个框架，驱动是引入依赖的时候加载的
// 我们把app模块，比作一个驱动，ioc比作框架
// _ import app 自动把app注册到ioc框架里面去
var impl = &HostServiceImpl{}

func(i *HostServiceImpl) Name() string{
	return host.AppName
}
func init(){
	//对象注册到IOC层
	// apps.HostService = impl
	apps.RegsitryImpl(impl)
}






